/*
题目描述
输入10个学生5门课程的成绩，分别用函数实现下列的功能：
(1)     计算每一个学生的平均分；
(2)     计算每一门课程的平均分；
(3)     找出所有50个分数中最高的分数所对应的学生和课程；
(4)     计算平均分方差：

s = 1/n Exi^2 - (Exi/n)2

其中，xi为某一个学生的平均分。

输入
共有5行，每一行有10个用空格隔开的实数，
表示某门课程所有10个学生的成绩，
学生的编号顺序为从0至9，
课程的编号顺序为从0至4。
保证所有成绩不小于0且不大于100，且所有分数中最高的分数是唯一的。

输出
第一行输出10个实数，分别表示每一个学生的平均分，每个实数后输出一个空格。
第二行输出5个实数，分别表示每一门课程的平均分，每个实数后输出一个空格。
第三行输出所有50个分数中最高的分数以及对应的学生编号和课程编号，用空格隔开。
第四行输出平均分方差。
所有的实数输出在小数点后保留2位小数，并请注意行尾输出换行。
*/
#include <stdio.h>
double getStudentAverageScore(double data[5][10], int id)
{
    double sum = 0;
    for (int i = 0; i < 5; i++)
    {
        sum += data[i][id];
    }
    return sum / 5;
}
double getCourseAverageScore(double data[5][10], int id)
{
    double sum = 0;
    for (int i = 0; i < 10; i++)
    {
        sum += data[id][i];
    }
    return sum / 10;
}
double getVariance(double data[5][10])
{
    double s1 = 0;
    double s2 = 0;
    int n = 10;
    for (int i = 0; i < 10; i++)
    {
        double xi = getStudentAverageScore(data, i);
        s1 += xi * xi;
        s2 += xi;
    }
    return s1 / n - (s2 / n) * (s2 / n);
}
void printHighestScore(double data[5][10])
{
    int student = 0;
    int course = 0;
    for (int i = 0; i < 5; i++)
    {
        for (int j = 0; j < 10; j++)
        {
            if (data[i][j] > data[course][student])
            {
                course = i;
                student = j;
            }
        }
    }
    printf("%.2lf %d %d\n", data[course][student], course, student);
}
int main()
{
    double data[5][10];
    for (int i = 0; i < 5; i++)
    {
        for (int j = 0; j < 10; j++)
        {
            scanf("%lf", &data[i][j]);
        }
    }
    for (int i = 0; i < 10; i++)
    {
        printf("%.2lf ", getStudentAverageScore(data, i));
    }
    printf("\n");
    for (int i = 0; i < 5; i++)
    {
        printf("%.2lf ", getCourseAverageScore(data, i));
    }
    printf("\n");
    printHighestScore(data);
    printf("%.2lf", getVariance(data));
}